package com.aop.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * @author xinwang
 * @date 2020/2/23 12:08
 **/
//日志 切面类
/*@Component
@Aspect*/
public class AopLog {

    @Pointcut("execution(* com.aop.service.UserService.* (..))")
    public void pointcut(){

    }

    @Before("pointcut()") //前置通知
    public void before(){
        System.out.println("前置通知，在方法之前执行.....");
    }
    @After("pointcut()")//后置通知
    public void after(){
        System.out.println("后置通知，在方法之后执行.....");
    }
    @AfterThrowing("pointcut()")//异常通知
    public  void afterThrowing(){
        System.out.println("异常通知...");
    }
    @Around("pointcut()")//环绕通知
    public  void around(ProceedingJoinPoint point) throws Throwable {
        //调用方法之前执行
        System.out.println("环绕通知 调用之前执行.....");
        point.proceed(); //代理调用方法，如果调用方法出现异常不会执行后面代码
        System.out.println("环绕通知 调用之后执行.....");
    }
}
